from tkinter import *
import datetime
from tkinter import messagebox
from PIL import Image,ImageTk
from time import *
import ctypes
import winsound
import subprocess


class Clock(Tk):
    def __init__(self) -> None:
# super()是调用父类（超类）的方法  
#  Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx 
        super().__init__()  

        self.title("clock")
        # self.minsize(width=300 , height = 300)
        self.geometry("400x400") #窗体大小


        #在右边插入一张图片
        #在Tk中显示照片时 加入函数中photo路径会被回收 所以需要全局变量global

        self.All_time = []

        self.img_path = ''
        self.music_path = ''
        self.AllPath()
        global img
        if self.img_path == 'no': print("没有背景图哦")
        else:
            open_img = Image.open(self.img_path).resize((400,400))
            img = ImageTk.PhotoImage(open_img)
            Label(self , image=img ).pack()


        Label(self, text= "现在的时间：" ,font=("宋体" , 15) ).place(x=15 , y =15)

        self.now_time = ''
        self.lal =  Label(self , text= self.now_time, font="宋体 15" ,bg="#D6EAF8")
        self.lal.place(x=50 , y=50)    


        Label(self , text="设置闹钟：" ,font=("宋体" , 15)).place(x=15 , y =90)

        self.hour = StringVar(value="00")
        self.minute = StringVar(value="00")
        self.second = StringVar(value="00")

        self.entry_hour = Entry(self , textvariable= self.hour , font=("宋体",15) , bg="#D6EAF8" , width=3 , justify=CENTER)
        self.entry_hour.place(x=60 , y = 130)

        Label(self , text=":" ,font=("宋体",20)).place(x=95,y=122)

        self.entry_minute = Entry(self , textvariable= self.minute , font=("宋体",15) , bg="#D6EAF8" , width=3 , justify=CENTER)
        self.entry_minute.place(x=115 , y = 130)

        Label(self , text=":" ,font=("宋体",20)).place(x=150,y=122)

        self.entry_second = Entry(self , textvariable=self.second , font="宋体 15" , bg = "#D6EAF8",width=3 , justify=CENTER)
        self.entry_second.place(x=170,y=130)

        #按键设置
        self.replace_btn1 = Button(self , text="重置" ,font= "宋体 15" , width=5 ,command= self.replace_x)
        self.replace_btn1.place(x=50 , y= 170) 

        self.replace_btn2 = Button(self , text="OFF" ,font= "宋体 15" , width=5 ,command= self.turn_off_start)
        self.replace_btn2.place(x=150  , y= 170)

        # self.replace_btn1 = Button(self , text="保存" ,font= "宋体 15" , width=5 ,command= self.replace_x)
        # self.replace_btn1.place(x=50 , y= 210) 



        self.times()

        
    def AllPath(self):
        print('请输入你想设置的背景图片路径（没有的请输入no）：')
        self.img_path = input()
        print("输入闹钟铃声路径(想要自带的请输入own)：")
        self.music_path = input()



    # def 
    def replace_x(self):

        #改进一下 没有归零 还需要手动
        self.entry_hour.select_clear()  
        # self.entry_hour.insert(0, "00")
        self.entry_minute.select_clear()
        self.entry_second.select_clear()
        

        self.replace_btn2['text'] = 'OFF'
        self.entry_hour['state'] = NORMAL
        self.entry_minute['state'] = NORMAL
        self.entry_second['state'] = NORMAL
        
        messagebox.showinfo(title='重置成功', message='请再次输入你需要设置的时间\n或者关闭')





    def turn_off_start(self):
        flag = self.replace_btn2['text']      # 定义一个flag来表示闹钟的状态
        # 如果是打开状态就什么也不做
        if flag == 'ON':
            return
        # 如果是关闭状态，就把text变为ON，三个输入框变为不可编辑
        else:
            self.replace_btn2['text'] = 'ON'
            self.entry_hour['state'] = DISABLED
            self.entry_minute['state'] = DISABLED
            self.entry_second['state'] = DISABLED
            # 获取三个输入框内的时间
            set_time = '%s:%s:%s' % (self.entry_hour.get(), self.entry_minute.get(), self.entry_second.get())
            list_time = []
            set_all_times = int(self.entry_hour.get())
            if int(self.entry_hour.get())>24 : messagebox.showinfo(title='设置失败', message=' 一天最多24小时 \n  请点击重置再输入' )
            elif int(self.entry_minute.get())>60 : messagebox.showinfo(title='设置失败', message=' 一小时最多60分钟 \n  请点击重置再输入' )
            elif int(self.entry_second.get())>60 : messagebox.showinfo(title='设置失败', message=' 一分钟最多60秒 \n  请点击重置再输入' )
            else:
                # if int(i) >= int(j) : 
                #     for i, j in zip(set_time.split(':'), self.now_time.split(' ')[-1].split(':')):
                #         # 计算离闹钟启动还有多少时间
                #         list_time.append(abs(int(i) - int(j)))
                    
                #     messagebox.showinfo(title='设置成功', message='距离启动还有%d小时%d分%d秒' % tuple(list_time))
                
                for i in set_time.split(':') :
                    list_time.append(i)
                    

                messagebox.showinfo(title="设置成功" , message= '将在%s小时%s分钟%s秒启动' % tuple(list_time))
                   




    def times(self):

        # palyer = ctypes.windll.kernel132  #轰鸣模块

        
        self.now_time = strftime("%Y-%m-%d %H:%M:%S")   
        self.lal.config(text= self.now_time)

        set_time = '%s:%s:%s'%(self.entry_hour.get(),self.entry_minute.get(),self.entry_second.get())

        if self.replace_btn2["text"] == "ON":
            if set_time == self.now_time.split(' ')[-1]:
                print("时间到了！")
                if self.music_path == 'own':
                    for i in range(10):
                        winsound.Beep(2000, 1000)

                else:
                    subprocess.Popen(['start',self.music_path] ,shell = True)
                    

        self.after(1000 , self.times)





Clock().mainloop()




